package logic;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;

public class Pestanna  implements Serializable {

	/**
	 * ATTRIBUTES
	 */
	// Id del serialize
	private static final long serialVersionUID = 83844891229196941L;
	// Cuadricula donde se pondran los block de la funcion
	private Block[][]		_Cuadricula;
	// Tabla de simbolos
	private ArrayList<Var>	_Variables;
	// Commando de Inicio
	private Command			_Inicio;
	// nombre a mostrar
	private String			_Nombre;
	// id: corresponde a indice en la lista de pestannas
	private int 			_Id;
	
	/**
	 * Constructor
	 */
	public Pestanna(){
		_Cuadricula = new Block[Constantes.CASILLAS_X][Constantes.CASILLAS_Y];
		_Variables  = new ArrayList<Var>();
	}
	
	/**
	 * Comprueba si existe un block alrededor
	 * @param row
	 * @param col
	 * @return
	 */
	public boolean exist(int row , int col){
		if ( row < 0 || col < 0 || row >= Constantes.CASILLAS_X || col >= Constantes.CASILLAS_Y ){
			return false;
		}
		return _Cuadricula[row][col] != null;
	}

	/**
	 * Gets
	 */
	public int[] getPosBlockSig( int pPosX, int pPosY, int pAntPosX, int pAntPosY ){
		for( int cnt=0; cnt<Constantes.CNT_POS; cnt++){
			int row = pPosX + cnt%3 - 1;
			int col = pPosY + cnt/3 - 1;
			if ( (row >= 0 && col >= 0 && col < Constantes.CASILLAS_X && row < Constantes.CASILLAS_Y) &&
					( pAntPosX != row || pAntPosY != col ) && ( pPosX != row || pPosY != col ) && cnt%2!=0 ){
				Block casillaActual = _Cuadricula[row][col];
				if( casillaActual != null && ( casillaActual.getType() == Constantes.TYPE_COMMAND || 
					casillaActual.getType() == Constantes.TYPE_PIPE ) &&
					!(casillaActual.getType() ==Constantes.TYPE_COMMAND && ((Command)casillaActual).get_Id() == Constantes.ID_MODIF)){
					int coord[] = {row, col};
						return coord;
				}
			}
		}
		return null;
	}
	
	public ArrayList<Var> get_Variables() {
		return _Variables;
	}
	
	public Block[][] getCuadricula(){
		return _Cuadricula;
	}
	
	public Block getBlock( int pPosX, int pPosY ){
		return _Cuadricula[pPosX][pPosY];
	}
	
	public Block getAdyacente( int rRow , int rCol , int pPos ){
		try{
			return _Cuadricula[rRow + pPos%3 - 1][rCol + pPos/3 - 1];
		}catch(Exception e){
			
		}
		return null;
	}
	
	public Block[][] get_Cuadricula() {
		return _Cuadricula;
	}

	public Command get_Inicio() {
		return _Inicio;
	}
	
	public int get_Id() {
		return _Id;
	}
	
	/**
	 * Sets
	 */
	public void set_Cuadricula(Block[][] _Cuadricula) {
		this._Cuadricula = _Cuadricula;
	}

	public void set_Variables(ArrayList<Var> _Variables) {
		this._Variables = _Variables;
	}
	
	public void setInicio(Command _Inicio) {
		this._Inicio = _Inicio;
	}

	public void set_Id(int _Id) {
		this._Id = _Id;
	}

	public String get_Nombre() {
		return _Nombre;
	}

	public void set_Nombre(String _Nombre) {
		this._Nombre = _Nombre;
	}

	/**
	 * (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return _Nombre;
	}
	
	
	
}
